<?php

/**
 * 选择排序: 每次在遍历中找出最大或者最小的数据，然后将它放到相应的位置就可以了.
 * 和冒泡很像,冒泡是前后两个数据相比，很有可能每次比较都会发生交换。而选择排序则是以一个下标指针的位置移动来确定数据，最后也只进行一次交换。
 * 所以说，选择排序是有选择性的交换，而不是纯粹的一路交换到底。
 */
function SelectSort($numbers) {
    $n = count($numbers);
    for ($i = 0; $i < $n; $i++) {
        $k = $i;
        for ($j = $i + 1; $j < $n; $j++) {
            if ($numbers[$j] < $numbers[$k]) {
                $k = $j;
            }
        }
        if ($k != $i) {
            list($numbers[$i], $numbers[$k]) = [$numbers[$k], $numbers[$i]];
        }
    }
    return implode(', ', $numbers);
}

$numbers = [49, 38, 65, 97, 76, 13, 27, 49];
echo "原始数据: " . implode(', ', $numbers), PHP_EOL;
echo "选择排序结果: " . SelectSort($numbers), PHP_EOL;
//13, 27, 38, 49, 49, 65, 76, 97